package com.msh.starter.captcha.util;

import com.msh.starter.captcha.consts.CaptchaArrayConst;
import java.awt.Color;
import java.security.SecureRandom;

public class CaptchaUtil {
  public static final SecureRandom RANDOM = new SecureRandom();


  /**
   * 随机一个上下偏移量
   * @param offset
   * @return
   */
  public static int randomOffset(int offset){
    int i = RANDOM.nextInt(offset*2);
    return i - offset;
  }

  /**
   * 获取默认的随机字符
   * @return      随机字符
   */
  public static char nextChar(){
    return CaptchaArrayConst.NUM_EN_MIX[nextInt(CaptchaArrayConst.NUM_EN_MIX.length)];
  };



  /**
   * 获取两个数之间的随机数
   * @param start         起始值
   * @param end           结束值
   * @return              随机数
   */
  public static int nextInt(int start,int end){
    return Math.min(start,end) + nextInt(Math.abs(start - end));
  }

  /**
   * 获取0～end之间的随机数
   * @param end           结束值
   * @return              随机数
   */
  public static int nextInt(int end){
    return RANDOM.nextInt(end);
  }


  /**
   * 在指定的颜色范围内随机选择一种颜色
   * @param start     开始值
   * @param end       结束值
   * @return          RGB颜色
   */
  public static Color color(int start,int end){
    start = Math.min(start,255);
    end = Math.min(end,255);
    int r = nextInt(start, end),g = nextInt(start, end),b = nextInt(start, end);
    return new Color(r,g,b);
  }

  /**
   * 随机从Web安全色中选取一种颜色
   * @return      RGB颜色
   */
  public static Color color(){
    int[] rgb = CaptchaArrayConst.COLORS[nextInt(CaptchaArrayConst.COLORS.length)];
    return new Color(rgb[0],rgb[1],rgb[2]);
  }

  /**
   * 随机从Web安全色中选取一种颜色
   * @return      RGB颜色
   */
  public static Color[] colors(int length){
    Color[] colors = new Color[length];
    for (int i = 0; i < length; i++) {
      colors[i] = CaptchaUtil.color();
    }
    return colors;
  }
}
